/**
 * @description 判读是否为外链
 * @param path
 * @returns {boolean}
 */
export function isExternal(path) {
    return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @description 校验密码由6-18位数字和英文组成
 * @param str
 * @returns {boolean}
 */
export function isPassword(str) {
    let reg = /^[a-zA-Z0-9]{6,18}$/
    return reg.test(str)
}

/**
 *
 * @description 判断是否为正整数包括0
 * @param value
 * @returns {boolean}
 */
export function isNumber(value) {
    const reg = /^(0|[1-9][0-9]*)$/
    return reg.test(value)
}

/**
 * @description 判断是否是名称
 * @param value
 * @returns {boolean}
 */
export function isName(value) {
    const reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/
    return reg.test(value)
}

/**
 * @description 判断是否是字符串
 * @param str
 * @returns {boolean}
 */
export function isString(str) {
    return typeof str === 'string' || str instanceof String
}

/**
 * @description 判断是否是数组
 * @param arg
 * @returns {arg is any[]|boolean}
 */
export function isArray(arg) {
    if (typeof Array.isArray === 'undefined') {
        return Object.prototype.toString.call(arg) === '[object Array]'
    }
    return Array.isArray(arg)
}

/**
 * @description 判断是否是手机号
 * @param str
 * @returns {boolean}
 */
export function isPhone(str) {
    const reg = /^1\d{10}$/
    return reg.test(str)
}

/**
 * @description 判断是否是身份证号(第二代)
 * @param str
 * @returns {boolean}
 */
export function isIdCard(str) {
    const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
    return reg.test(str)
}

/**
 * @description 判断是否是邮箱
 * @param str
 * @returns {boolean}
 */
export function isEmail(str) {
    const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
    return reg.test(str)
}

/**
 * @description 判断是否是邮编
 * @param str
 * @returns {boolean}
 */
export function isPost(str) {
    const reg = /^[1-9][0-9]{5}$/
    return reg.test(str)
}

/**
 * @description 判断是否中文
 * @param str
 * @returns {boolean}
 */
export function isChina(str) {
    const reg = /^[\u4E00-\u9FA5]{2,4}$/
    return reg.test(str)
}

/**
 * @description 判断是否为固话或手机
 * @param str
 * @returns {boolean}
 */
export function isTelOrMobile(str) {
    const reg = /^((0\d{2,3}-\d{7,8})|(1[3456789]\d{9}))$/
    return reg.test(str)
}

/**
 * @description 判断是否为数字且最多两位小数
 * @param str
 * @returns {boolean}
 */
export function isNum(str) {
    const reg = /^\d+(\.\d{1,2})?$/
    return reg.test(str)
}

/**
 * @description 判断是否数字字母组合统一社会信用代码
 * @param str
 * @returns {boolean}
 */
export function isCompanyCode(str) {
    const reg = /^[0-9a-zA-Z]*$/g
    return reg.test(str)
}

/**
 * @description 判断是否为网址
 * @param str
 * @returns {boolean}
 */
export function isWebsiteURL(str) {
    const reg = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/
    return reg.test(str)
}

/**
 * @description 金额判断 大于0的数字 保留两位小数
 * @param str
 * @returns {boolean}
 */

export function isAmount(str) {
    const reg = /^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/
    return reg.test(str)
}

/**
 * @description 费率 为数字0-100,最多保留两位小数
 * @param str
 * @returns {boolean}
 */

export function isRate(str) {
    // 0 - 100
    const reg = /^(((\d|[1-9]\d)(\.\d{1,2})?))$/
    return reg.test(str)
}
